package com.coursehub.shared.transaction;

/**
 * 分布式事务步骤接口
 * 基于Saga模式，每个步骤都需要实现正向操作和补偿操作
 */
public interface TransactionStep {
    
    /**
     * 获取步骤名称
     */
    String getStepName();
    
    /**
     * 执行正向操作
     * @throws Exception 执行失败时抛出异常
     */
    void execute() throws Exception;
    
    /**
     * 执行补偿操作
     * 当事务失败时，需要回滚已执行的操作
     * @throws Exception 补偿失败时抛出异常
     */
    void compensate() throws Exception;
    
    /**
     * 获取步骤描述
     */
    default String getDescription() {
        return getStepName();
    }
    
    /**
     * 检查步骤是否可以执行
     */
    default boolean canExecute() {
        return true;
    }
    
    /**
     * 检查步骤是否需要补偿
     */
    default boolean needsCompensation() {
        return true;
    }
}